#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include "lvgl.h"
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include "lvgl/src/misc/lv_log_file.h"
#include "./drv/lvgl_drv.h"
#include "./pages/page_manager.h"
#include "com/usermgr/usermgr.h"
#include "com/sysmgr/sysmgr.h"
#include "lv_app_conf.h"

extern void backtrace_print(void);


// 信号处理函数，用于安全退出和处理段错误
static void signal_handler(int signo) {
    printf("\n=========>>>catch signal %d <<<=========\n", signo);

    if (signo == SIGINT || signo == SIGTERM || signo == SIGSEGV) {
        backtrace_print();
        fflush(stdout);
        
        // 关闭日志文件
        lv_log_file_close();
        
        exit(0);
    }
}

// 应用程序入口
int main(void) {
    // 注册SIGSEGV信号处理函数
    signal(SIGSEGV, signal_handler);
    signal(SIGTERM, signal_handler);

    // 初始化FFmpeg
    av_register_all();
    avcodec_register_all();

    // 初始化LVGL驱动
    lvgl_driver_init();

    // 初始化用户管理模块
    if (!usermgr_init(DB_USER_FILE_PATH)) {
        fprintf(stderr, "Failed to initialize user management module\n");
        return -1;
    }

    // 初始化系统管理模块
    if (!sysmgr_init()) {
        fprintf(stderr, "Failed to initialize system management module\n");
        return -1;
    }

    // 初始化页面管理器
    page_manager_init();
    
    // 主循环
    while(1) {
        lv_timer_handler();
        usleep(5000);
    }
    
    return 0;
}